Non-volatile memory arrays such as flash memory arrays are well known in the art. Referring to FIG. 1, there is shown a typical prior art architecture of a non-volatile memory array 10. For the purpose of the present disclosure, the non-volatile memory array 10 shown in FIG. 1 has the capacity to store 32 megabytes. Although, as it is well known in the art, the present disclosure and the invention is not limited to 32 megabytes.
In the prior art, the memory array 10 is divided into a plurality of sectors shown as S.sub.0 . . . S.sub.65535. Each sector has 512 bytes, labeled as B0 . . . B511 with 16 control bytes labeled as C0-C15. The 16 control bytes associated with each sector stores signals indicative of error correction, control information and the status of the cells in that sector. Thus, in total, there are 32 megabytes of user storable non-volatile storage. (It should be clear to those of ordinary skill in the art that the memory array 10 shown in FIG. 1 is only of one plane, i.e. 1 bit with 7 other planes forming a total of 8 bits or one byte for each one of the 512 bytes in a sector.) Typically, in the prior art, the sectors are arranged such that all the non-volatile memory storage sites (or bits) within a sector are programmed simultaneously. Further, typically, 16 or more sectors form one segment. Thus, in the memory array 10 of the prior art, there are 4096 segments labeled as SG0 . . . SG4095. Typically, all 16 sectors within a segment are erased simultaneously.
Each sector can have a number of status. It can have the status that it is a valid sector having valid data stored therein. It can also have the status that the data therein is invalid and is ready to be erased. Finally, each sector can have the status that the sector has been erased.
In order for a controller (not shown) to control the erasing and programming of the memory array 10, the controller must know the status of each of the sectors. In the prior art, this has been accomplished by simply reading the control bytes associated with each sector to determine if the sector data is:
1. Valid; PA1 2. Invalid and is ready for erasure; or PA1 3. Has been erased.
When all the sectors within a particular segment have been determined to have the status of invalid data, then all the sectors within that segment can be erased. Further, if only certain sectors are found to have valid data and other sectors have invalid data, then a merge operation can be performed to move all of the sectors having valid data into a different segment and then erase the sectors of that segment. All of the operations to search for free sectors or to find sectors of different segments for a merge operation can be time consuming. In particular, the simple task of locating sectors to determine the status of whether the data stored therein is valid, invalid, or erased is time consuming. For example, if searching one segment requires 200 microseconds, a search of 4096 segments would require 800 milliseconds or almost one full second. This time delay is not acceptable to the consumer.